﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;

namespace Worms3003
{
    public class Worms
    {
        #region atributos
        #region estados
        public enum Estados {chegando, parado, andando, correndo, pulando, atirando, morrendo}
        public Estados estados;
        #endregion
        public Texture2D textura;
        public int larguraImagem, alturaImagem, x, y, largura, altura, xCut, yCut, intervalo, totalFramesX, totalFramesY;
        float rotação;
        Vector2 velocidade;
        SpriteEffects efeitos;
        Color cor;
        public Vector2 posicao;
        int timer;
        int frameX, frameY;
        public Texture2D barra_de_vida;
        public int largura_barra_de_vida = 20;
        public Color cor_barra_de_vida;
        public bool esperar = true;
        public Rectangle retangulo;

       

        //public static List<Worm> =
 
        #region Colisão por pixels
        public Vector2 gravidade;

        #endregion

        #endregion

        public Vector2 positions
        {
            get { return this.posicao; }
            set { this.posicao = value; }
        }

        public Texture2D texturas
        {
            get { return this.textura; }
            set { this.textura = value; }
        }

        public Worms(Texture2D texture, int widthImage, int heightImage, int X, int Y, int width, int height, int XCut,
                     int YCut, int interval, int TotalFramesX, int TotalFramesY, float rotation, Vector2 speed, 
                     SpriteEffects spriteEffects, Color color)
        {
            #region construtor da classe
            textura = texture;
            larguraImagem = widthImage;
            alturaImagem = heightImage;
            x = X;
            y = Y;
            largura = width;
            altura = height;
            xCut = XCut;
            yCut = YCut;
            intervalo = interval;
            totalFramesX = TotalFramesX;
            totalFramesY = TotalFramesY;
            rotação = rotation;
            velocidade = speed;
            efeitos = spriteEffects;
            cor = color;
            frameX = 0;
            frameY = 0;
            //mudar, posteriormente, para o estado chegando
            estados = Estados.parado;
            #endregion

            //retangulo = new Rectangle();
            //mapacor = getdata(textura);
            //Lista.add(this);
            #region colisão por pixels
            gravidade = new Vector2(0, 5f);
            #endregion
        }

        public void Update(GameTime gameTime)
        {
            KeyboardState keyboard = Keyboard.GetState();

            #region colisão por pixels

            posicao.Y += gravidade.Y;

            #endregion

            if (!esperar)
            {
                switch (estados)
                {
                    #region chegando
                    case Estados.chegando:
                        {


                            break;
                        }
                    #endregion

                    #region parado
                    case Estados.parado:
                        {
                            /*      timer += gameTime.ElapsedGameTime.Milliseconds;

                                  if (timer >= intervalo)
                                  {
                                      timer = 0;

                                      if (frameX <= (totalFramesX - 1))
                                          frameX++;

                                      else
                                          frameX = 0;

                                      if (frameY <= (totalFramesY - 1))
                                          frameY++;

                                      else
                                          frameY = 0;
                                  } */


                            if (keyboard.IsKeyDown(Keys.Left) && !Game1.oldkeystate.IsKeyDown(Keys.Left))
                            {
                                efeitos = SpriteEffects.None;
                                andando();
                                posicao.X -= 0.5f;
                            }

                            if (keyboard.IsKeyDown(Keys.Right) && !Game1.oldkeystate.IsKeyDown(Keys.Right))
                            {
                                efeitos = SpriteEffects.FlipHorizontally;
                                andando();
                                posicao.X -= 0.5f;
                            }

                            if (keyboard.IsKeyDown(Keys.Space) && !Game1.oldkeystate.IsKeyDown(Keys.Space))
                            {
                                pulando();
                            }

                            if (keyboard.IsKeyDown(Keys.Enter) && !Game1.oldkeystate.IsKeyDown(Keys.Enter))
                            {
                                atirando();
                            }


                            break;
                        }
                    #endregion

                    #region andando
                    case Estados.andando:
                        {
                            if (efeitos == SpriteEffects.None)
                                posicao.X -= velocidade.X;

                            else if (efeitos == SpriteEffects.FlipHorizontally)
                                posicao.X += velocidade.X;

                            if (keyboard.IsKeyUp(Keys.Right) && keyboard.IsKeyUp(Keys.Left))
                            {
                                parado();
                            }

                            break;
                        }
                    #endregion

                    #region pulando
                    case Estados.pulando:
                        {
                            break;
                        }
                    #endregion

                    #region correndo
                    case Estados.correndo:
                        {
                            break;
                        }
                    #endregion

                    #region morrendo
                    case Estados.morrendo:
                        {
                            break;
                        }
                    #endregion
                }
            }
            
            //enquanto não há as animações, deixem o trecho do código abaixo em comentário
            Game1.oldkeystate = keyboard;
        }

        public void Draw(SpriteBatch spriteBatch)
        {
            spriteBatch.Draw(textura, new Rectangle((int)positions.X, (int)positions.Y, larguraImagem, alturaImagem), new Rectangle(x + frameX * xCut, y + frameY * yCut, largura, altura), cor, rotação, Vector2.Zero, efeitos, 0f);
            
            spriteBatch.Draw(barra_de_vida, new Rectangle((int)positions.X + 27, (int)positions.Y + 5, largura_barra_de_vida, 4), cor_barra_de_vida); 
        }

        private void parado()
        {
            estados = Estados.parado;
        }

        private void andando()
        {
            estados = Estados.andando;
        }

        private void pulando()
        {
        }

        private void correndo()
        {
        }

        private void atirando()
        { 
        }
    }
}
